<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style></style>
  </head>
  <body>
    <div>
      <p>因为js是单线程执行代码的,为了不造成代码阻塞，所以有了异步编程</p>
      <p>
        异步编程就是需要等待主线程的代码执行完毕才会开始执行异步代码,代码运行时遇到异步代码后会先将代码加入消息队列等待，主线程代码执行完毕后会执行回调执行消息队列中的异步函数
      </p>
      <p>EventLoop是事件循环，是一种解决js单线程运行时不阻塞的一种机制</p>
      <p>
        消息队列：是用来存放宏任务的队列，一开始整个脚本作为一个宏任务，执行过程中将同步代码先执行，异步代码等待到达时间后再将方法回调放入宏任务中执行
      </p>
      <p>异步又分为宏观和微观，微观的执行顺序快于宏观</p>
      <p>产生宏任务的方式</p>
      <p>1.script中的代码块</p>
      <p>2.setTimeout()</p>
      <p>3.setInterval()</p>
      <p>4.setImmediate()</p>
      <p>5.注册事件</p>
      <p>产生微任务的方式</p>
      <p>Promise</p>
      <p>Generator</p>
      <p>async & await</p>
      <p>MutationObserver</p>
      <p>queueMicrotask</p>
    </div>
    <script></script>
  </body>
</html>
